package br.ufg.inf.espweb.sgca.web.controller;

import br.ufg.inf.espweb.sgca.model.Docente;
import br.ufg.inf.espweb.sgca.model.TipoDeDocente;
import br.ufg.inf.espweb.sgca.service.DocenteService;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Serializable;
import java.util.List;
import lombok.Getter;
import lombok.Setter;
import org.omnifaces.util.Messages;
import org.omnifaces.util.Utils;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.UploadedFile;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 *
 * @author diCastro
 */
@Controller("docenteCtrl")
@Scope("view")
public class DocenteController implements Serializable {
    @Autowired
    private DocenteService docenteService;
    @Getter
    @Setter
    private Docente docente;
    private List<Docente> docentes;
    @Getter
    @Setter
    private UploadedFile arquivoCSV;
    
    public void adicionarNovoProfessor(){
        docente = new Docente(TipoDeDocente.PROFESSOR);
    }
    
    public void adicionarNovoFuncionario(){
        docente = new Docente(TipoDeDocente.FUNCIONARIO);
    }
    
    public void editarDocente(){
        docente = docenteService.obterPorId(docente.getId());
    }
    
    public void salvarDocente(){
        if(docente != null && docente.getId() == null){
            docenteService.salvar(docente);
            Messages.addGlobalInfo("{0} salvo com sucesso!", docente.getNome());
        }else if(docente != null && docente.getId() != null){
            docenteService.atualizar(docente);
            Messages.addGlobalInfo("{0} atualizado com sucesso!", docente.getNome());
        }
        docente = null;
    }
    
    public void cancelarEdicao(){
        docente = null;
    }
    
    public void prepararImportacao(){
        arquivoCSV = null;
    }
    
    public void importarProfessores() throws IOException{
        if(arquivoCSV != null){
            docenteService.importarProfessores(new BufferedReader(new InputStreamReader(arquivoCSV.getInputstream())));
        }else{
            Messages.addGlobalWarn("É necessário inserir um arquivo para importação", "");
        }
    }
    
    public void handleArquivoCSVUpload(FileUploadEvent evento){
        arquivoCSV = evento.getFile();
    }
    
    public List<Docente> getDocentes() {
        if(Utils.isEmpty(docentes))
            docentes = docenteService.listar();
        return docentes;
    }
}